package com.hcss.common.codegenerator;

import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.api.ProgressCallback;
import org.mybatis.generator.api.VerboseProgressCallback;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

/**
 * @desc mybatis generator 使用启动类
 * @author maxiaoming
 * @date 2019-02-25 15:59
 * @company 浙江鸿程计算机系统有限公司 
 */
public class MybatisGeneratorTool {
    // 是否覆盖已有的文件
    public static final Boolean OVERWRITE = true;

    /**
     * 使用注意点：
     * 1、idea 下需要设置【配置调试】的application的工作目录为 $MODULE_DIR$
     * 2、generatorConfig.xml 中 targetProject="src/main/java" 不需要加项目名
     * @param args
     */
    public static void main(String[] args) {
        shell();
    }

    private static void shell() {
        List<String> warnings = new ArrayList<String>();
        try {
            String configFilePath = System.getProperty("user.dir")
                    .concat("/src/main/resources/generatorConfig.xml");
            System.out.println("加载配置文件===" + configFilePath);
            File configFile = new File(configFilePath);
            ConfigurationParser cp = new ConfigurationParser(warnings);
            Configuration config = cp.parseConfiguration(configFile);
            DefaultShellCallback callback = new DefaultShellCallback(OVERWRITE);
            MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config,
                    callback, warnings);
            ProgressCallback progressCallback = new VerboseProgressCallback();
            myBatisGenerator.generate(progressCallback);
        } catch (Exception e) {
            e.printStackTrace();
        }

        // 打印告警
        for (String warning : warnings) {
            System.out.println(warning);
        }
    }
}
